home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 145 / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin / games / spassion / source.lzh / SOURCE / TVRAM.S < prev    next >
Text File  |  2000-03-22  |  2KB  |  78 lines

  1. *    gvram    テキスト画面に線を引く
  2.  
  3. .cpu 68000
  4. *.include doscall.mac
  5. *.include iocscall.mac
  6. *.include my.mac
  7.  
  8. .xdef    _DrawLine
  9.  
  10. *********************************************************
  11. *    指定された位置から
  12. *    長方形を描く
  13. *    (スーパーバイザに切り換えてから使用)
  14. * *BOX_PTR
  15. *********************************************************
  16. _DrawLine:
  17.     .offset    0
  18. STACK_G:    .ds.l    1
  19. RET_G:        .ds.l    1
  20. BOX_G:        .ds.l    1
  21.     .text
  22.     .even
  23.     link    a6,#0
  24.     movem.l    d3-d5,-(sp)
  25.  
  26.     *unsigned short *vp=(unsigned short *)(0xE00000+(y1*512+x1)*2);
  27.     move.l    BOX_G(a6),a2    *a2=&box
  28.  
  29.     move.w    2(a2),d1        *d1=y1
  30.     cmp.w    #255,d1            *y1>255だったらリターン
  31.     bhi        ret
  32.     move.w    6(a2),d4        *d4=y2
  33.     tst.w    d4
  34.     bmi        ret                *y2<0だったらリターン
  35.  
  36.     move.w    0(a2),d0        *d0=x1
  37.     tst.w    d0                *if(x1<0)x1=0;
  38.     bpl        next
  39.     clr.w    d0
  40. next:
  41.     lsr.w    #3,d0            *d0=x1/8
  42. *    move.w    2(a2),d1        *d1=y1
  43.     lsl.w    #7,d1            *d1=y*128
  44.     add.w    d0,d1            *d1=y*128+x/8
  45.     lea.l    $00E00000,a0    * TVRAM の左上アドレス
  46.     add.w    d1,a0
  47.  
  48.     move.w    4(a2),d1        *d1=X2
  49.     tst.w    d1                *if(x2<0)x2=0;
  50.     bpl        next1
  51.     clr.w    d1
  52. next1:
  53.     lsr.w    #3,d1            *d1=x2/8
  54.     sub.w    d0,d1            *d1=width-1
  55.     move.w    d1,d3            *d3=width-1
  56.     move.w    #128-1,d5        *d5=127
  57.     sub.w    d3,d5            *本当は128-widthだが、本当は127-(width-1)で省略
  58.  
  59.     move.w    2(a2),d0        *d0=Y1
  60.     move.w    d4,d1            *d1=Y2
  61.     sub.w    d0,d1
  62.  
  63.     move.w    8(a2),d4        *d4=COL
  64. y_loop_put:
  65.     move.w    d3,d2
  66. x_loop_put:
  67.     move.b    d4,(a0)+        *線を引く
  68.     dbra    d2,x_loop_put
  69.     add.w    d5,a0
  70.     dbra    d1,y_loop_put
  71.  
  72. ret:
  73.     movem.l    (sp)+,d3-d5
  74.     unlk    a6
  75.     rts
  76.  
  77. .end
  78.